﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using DynamicAuditor.DTOs;


namespace DynamicAuditor.DALAuditor
{
    public class clsUsuarioMg
    {
        /// <summary>
        /// Fecha: 28-Setiembre-2010
        /// Autor: Lester Salazar Viales
        /// Descripcion: En esta clase se va a manejar todas las operaciones correspondientes a usuarios tales como: Insercion, Actualizacion, Eliminacion
        /// y todo lo relaciona con clientes.
        /// </summary>
        public clsUsuarioMg()
        { 
        
        }

        //Declaracion de la varaiable tipo datacontext que vamos a utilizar en toda la clase.
        DynamicAuditorDataContext bd = new DynamicAuditorDataContext();
        
        
        public int CrearUsuario(DTOs.dtoUsuario insusr)
        {
             //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0
            int resp =0;
            USUARIO usr = new USUARIO();

            try
            {
               
                usr.Nombre = insusr.Nombre;
                usr.Activo = insusr.Activo;
                usr.Cedula = insusr.Cedula;
                usr.Usuario1 = insusr.Usuario;
                usr.idCliente = insusr.idCliente;
                usr.Password = insusr.Password;
                usr.CreadoPor = insusr.CreadoPor;
                usr.Email = insusr.Email;
                usr.Empresa = insusr.Empresa;
                usr.FechaCreacion = insusr.FechaCreacion;
            
                bd.USUARIOs.InsertOnSubmit(usr);
                bd.SubmitChanges();
                resp = 1;
                
                
            }
            catch(Exception ex)
            {
                throw new Exception("Ocurrio un error al crear el usuario. " + ex.Message);
                resp = 0;
                
            }
            


            return resp;
        }

        public int UpdateUsuario(dtoUsuario dtousuario)
        {
             //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0
            int i = 0;


            try
            {
                USUARIO user = bd.USUARIOs.Single(p => p.idUsuario == dtousuario.idUsuario);
                user.Nombre = dtousuario.Nombre;
                user.Activo = dtousuario.Activo;
                user.Cedula = dtousuario.Cedula;
                user.Usuario1 = dtousuario.Usuario;
                user.Password = dtousuario.Password;
                user.CreadoPor = dtousuario.CreadoPor;
                user.Email = dtousuario.Email;
                user.Empresa = dtousuario.Empresa;
                user.FechaCreacion = dtousuario.FechaCreacion;
                user.idCliente = dtousuario.idCliente;
                bd.SubmitChanges();

                i = 1;

            }
            catch (Exception ex)
            {
                throw new Exception("No se pudieron actualizar los datos del usuario." + ex.Message);
            }

            return i;
        }

        public int DeleteUsuario(int iduser)
        {
            //Se retorna un 1 si el proceso se realizo correctamente de lo contrario se retorna un 0

            int x = 0;

            try
            {

                var usr = bd.USUARIOs.Single(p => p.idUsuario == iduser);

                bd.USUARIOs.DeleteOnSubmit(usr);
                bd.SubmitChanges();
                x = 1;
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo borrar el usuario " + ex.Message);
                x = 0;
            }

            return x;
        }

        public dtoUsuario ObtenerUsuarioporId(int idUsuario)
        {
            dtoUsuario usuario = new dtoUsuario();

            try
            {
                USUARIO datousr = bd.USUARIOs.Single(p => p.idUsuario == idUsuario);
                usuario.Activo = Convert.ToBoolean(datousr.Activo);
                usuario.CreadoPor = Convert.ToInt16(datousr.CreadoPor);
                usuario.Cedula = datousr.Cedula;
                usuario.Email = datousr.Email;
                usuario.Empresa = datousr.Empresa;
                usuario.FechaCreacion = Convert.ToDateTime(datousr.FechaCreacion);
                usuario.idUsuario = datousr.idUsuario;
                usuario.Nombre = datousr.Nombre;
                usuario.Password = datousr.Password;
                usuario.Usuario = datousr.Usuario1;
                usuario.idUsuario = datousr.idUsuario;
                usuario.idCliente = Convert.ToInt16(datousr.idCliente);
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception("No se pudo obtener datos del usuario. " + ex.Message);
               
            }

            return usuario;
        }

        public dtoUsuario ObtenerUsuarioporNombreUsuario(string strusuario)
        {
            dtoUsuario usuario = new dtoUsuario();

            try
            {
                USUARIO datousr = bd.USUARIOs.Single(p => p.Usuario1 == strusuario);
                usuario.Activo = Convert.ToBoolean(datousr.Activo);
                usuario.CreadoPor = Convert.ToInt16(datousr.CreadoPor);
                usuario.Cedula = datousr.Cedula;
                usuario.Email = datousr.Email;
                usuario.Empresa = datousr.Empresa;
                usuario.FechaCreacion = Convert.ToDateTime(datousr.FechaCreacion);
                usuario.idUsuario = datousr.idUsuario;
                usuario.Nombre = datousr.Nombre;
                usuario.Password = datousr.Password;
                usuario.Usuario = datousr.Usuario1;
                usuario.idUsuario = datousr.idUsuario;
                usuario.idCliente = Convert.ToInt16(datousr.idCliente);
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo obtener datos del usuario. " + ex.Message);
            }

            return usuario;
        }

        public dtoUsuario ObtenerUsuarioporNombreUsuarioPwd(string usuario, string password)
        {
            dtoUsuario user = new dtoUsuario();

            try
            {
                USUARIO datousr = bd.USUARIOs.Single(p => p.Usuario1 == usuario && p.Password == password);
               
                user.Activo = Convert.ToBoolean(datousr.Activo);
                user.CreadoPor = Convert.ToInt16(datousr.CreadoPor);
                user.Cedula = datousr.Cedula;
                user.Email = datousr.Email;
                user.Empresa = datousr.Empresa;
                user.FechaCreacion = Convert.ToDateTime(datousr.FechaCreacion);
                user.idUsuario = datousr.idUsuario;
                user.Nombre = datousr.Nombre;
                user.Password = datousr.Password;
                user.Usuario = datousr.Usuario1;
                user.idUsuario = datousr.idUsuario;
                user.idCliente = Convert.ToInt16(datousr.idCliente);
                
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception("No se pudo obtener datos del usuario." + ex.Message);
                
            }

            return user;

        }

        public List<dtoUsuario> ObtenerUsuariosActivos()
        {
            int i =0;
            List<dtoUsuario> listauseractivos = new List<dtoUsuario>();


            try
            {
                var usuactivos = (from p in bd.USUARIOs
                                  where p.Activo == true
                                  orderby p.Nombre
                                  select p).ToList();

                foreach (USUARIO user in usuactivos)
                {
                    listauseractivos.Add(new dtoUsuario());
                    listauseractivos[i].Activo = Convert.ToBoolean(user.Activo);
                    listauseractivos[i].Cedula = user.Cedula;
                    listauseractivos[i].CreadoPor = Convert.ToInt16(user.CreadoPor);
                    listauseractivos[i].Email = user.Email;
                    listauseractivos[i].Empresa = user.Empresa;
                    listauseractivos[i].FechaCreacion = Convert.ToDateTime(user.FechaCreacion);
                    listauseractivos[i].idUsuario = user.idUsuario;
                    listauseractivos[i].Nombre = user.Nombre;
                    listauseractivos[i].Password = user.Password;
                    listauseractivos[i].Usuario = user.Usuario1;
                    listauseractivos[i].idCliente = Convert.ToInt16(user.idCliente); 
                    i++;

                }
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo obtener la informacion solicitada." + ex.Message);
            }


            return listauseractivos;
        }






    }
}
